package com.youlai.jdk;


import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

/**
 * 2019年9月17日发布Java13特性
 * Switch 表达式（JEP 354）：允许将 switch 语句作为表达式使用，并且可以使用 lambda 表达式作为分支。
 * 文本块（JEP 355）：允许在代码中使用多行字符串，减少了处理文本的代码量。
 * 新的 GC 算法（JEP 351）：ZGC 和 Shenandoah GC 算法被认为是 JDK 13 中最重要的新特性之一，它们都是为了优化大型、高并发应用程序的性能而设计的。
 * 动态 CDS 归档（JEP 350）：Java 13 允许在运行时创建自定义类共享归档文件，以优化启动时间和内存占用。
 * 嵌套的基于文本的协议（JEP 370）：允许在 HTTP/2 上使用新的基于文本的协议 QUIC，以提高网络传输的性能和安全性。
 * 安全性增强（JEP 366）：Java 13 引入了一些新的安全性增强措施，如禁止使用弱加密算法、增强签名验证等。
 * @author zc
 * @date 2023-03-25 20:49
 */
public class Java13 {

        /**
        * Switch 表达式
        */
        @Test
        public void switchExpression() {
            // 传统的 switch 语句
            int i = 1;
            switch (i) {
                case 1:
                    System.out.println("one");
                    break;
                case 2:
                    System.out.println("two");
                    break;
                default:
                    System.out.println("other");
            }
            // 使用 switch 表达式
            int j = 1;
            String result = switch (j) {
                case 1 -> "one";
                case 2 -> "two";
                default -> "other";
            };
            System.out.println(result);
        }
        /**
        * 文本块
        */
        @Test
        public void textBlock() {
            // 传统的多行字符串
            String html = "<html>\n" +
                    "    <body>\n" +
                    "        <p>Hello, world</p>\n" +
                    "    </body>\n" +
                    "</html>\n";
            System.out.println(html);
            // 使用文本块
            String html2 = """
                    <html>
                        <body>
                            <p>Hello, world</p>
                        </body>
                    </html>
                    """;
            System.out.println(html2);
        }

        /**
        * 新的 GC 算法
        */
        @Test
        public void newGCAlgorithm() {
            // ZGC
            // 启用ZGC
            //java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC Main.java
            // Shenandoah
            // 启用Shenandoah
            //java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC Main.java
        }

        /**
        * 动态 CDS 归档
        */
        @Test
        public void dynamicCDS() {
            // java -XX:ArchiveClassesAtExit=app.jsa -cp myapp.jar MyApp
            // java -XX:SharedArchiveFile=app.jsa -cp myapp.jar MyApp
        }

        /**
        * 嵌套的基于文本的协议
        */
        @Test
        public void nestedTextBasedProtocol() throws IOException, InterruptedException {
            HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
            HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.example.com/")).build();
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(response.body());
        }

        /**
        * 安全性增强
        */
        @Test
        public void securityEnhancement() {
            // 禁止使用弱加密算法
            //  java -Djdk.crypto.KeyAgreement.legacyKDF=true MyApplication
            // 增强签名
        }
}
